/**
 * 文件操作辅助工具
 * 封装常用的文件操作功能
 */

const { ipcRenderer } = require('electron');
const path = require('path');

class FileHelper {
    /**
     * 选择文件
     * @param {Object} options - 文件选择选项
     * @returns {Promise<string|null>} 选中的文件路径
     */
    static async selectFile(options = {}) {
        try {
            const defaultOptions = {
                title: '选择文件',
                filters: [
                    { name: '所有文件', extensions: ['*'] }
                ]
            };
            
            const result = await ipcRenderer.invoke('select-file', { ...defaultOptions, ...options });
            
            if (result && !result.canceled && result.filePaths && result.filePaths.length > 0) {
                return result.filePaths[0];
            }
            
            return null;
        } catch (error) {
            console.error('选择文件失败:', error);
            throw new Error(`选择文件失败: ${error.message}`);
        }
    }

    /**
     * 选择Excel文件
     * @returns {Promise<string|null>} 选中的Excel文件路径
     */
    static async selectExcelFile() {
        return this.selectFile({
            title: '选择Excel文件',
            filters: [
                { name: 'Excel文件', extensions: ['xlsx', 'xls'] }
            ]
        });
    }

    /**
     * 选择保存路径
     * @param {Object} options - 保存选项
     * @returns {Promise<string|null>} 选中的保存路径
     */
    static async selectSavePath(options = {}) {
        try {
            const defaultOptions = {
                title: '选择保存路径',
                defaultPath: 'output.xlsx',
                filters: [
                    { name: 'Excel文件', extensions: ['xlsx'] }
                ]
            };
            
            const result = await ipcRenderer.invoke('select-save-path', { ...defaultOptions, ...options });
            
            if (result && !result.canceled && result.filePath) {
                return result.filePath;
            }
            
            return null;
        } catch (error) {
            console.error('选择保存路径失败:', error);
            throw new Error(`选择保存路径失败: ${error.message}`);
        }
    }

    /**
     * 获取文件名（不含扩展名）
     * @param {string} filePath - 文件路径
     * @returns {string} 文件名
     */
    static getFileName(filePath) {
        return path.basename(filePath, path.extname(filePath));
    }

    /**
     * 获取文件扩展名
     * @param {string} filePath - 文件路径
     * @returns {string} 扩展名
     */
    static getFileExtension(filePath) {
        return path.extname(filePath);
    }

    /**
     * 导出JSON数据
     * @param {Object} data - 要导出的数据
     * @param {string} filename - 文件名
     */
    static exportJSON(data, filename = 'export-data') {
        const jsonData = JSON.stringify(data, null, 2);
        const blob = new Blob([jsonData], { type: 'application/json' });
        const url = URL.createObjectURL(blob);
        
        const a = document.createElement('a');
        a.href = url;
        a.download = `${filename}-${Date.now()}.json`;
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
        URL.revokeObjectURL(url);
    }
}

module.exports = FileHelper;